using MyMVC;
using STHPMS1.ICore;
using System;
using STHPMS1.Common.C_Extension;
using STHPMS1.Common.C_Definition;
using System.Web.Routing;
using STHPMS1.Web.App_Start;
using System.Web.Http;

namespace STHPMS1.Web
{
	public class Global : System.Web.HttpApplication
	{
		protected void Application_Start (object sender, EventArgs e)
        {
            AppInitializer.Start();
		}


		protected void Session_Start (object sender, EventArgs e)
		{
		}

		protected void Application_BeginRequest (object sender, EventArgs e)
		{
		}

		protected void Application_AuthenticateRequest (object sender, EventArgs e)
		{
		}

		protected void Application_Error (object sender, EventArgs e)
		{
            Exception ex = Server.GetLastError();

            log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            log.ErrorFormat("Application Error:{0}", ex.ToString());

            // 判断是否为AJAX请求。
            // 如果是AJAX请求，我们可以不用做任何处理，
            // 因为前端已经有统一的全局处理逻辑。
            bool isAjaxRequest = string.Compare(Request.Headers["X-Requested-With"],"XMLHttpRequest", StringComparison.OrdinalIgnoreCase) == 0;

            if (isAjaxRequest == false)
            {
                // 是一个页面请求，此时我们可以这样处理：
                // 1. 本机请求（调试），那就出现黄页。
                // 2. 来自其他用户的访问，显示自定义的错误显示页面

                if (Request.IsLocal == false)
                {
                    // 不是本机请求
                    // 首先要清除异常，防止产生黄页。
                    Server.ClearError();

                    Response.StatusCode = 500;	// 继续设置500的响应，供IIS日志记录

                    // 这里，我直接显示所有的异常信息，
                    // 如果不希望这样显示，可以修改下面方法调用的第二个参数。
                    IActionResult page = new PageResult("/error", ex.Message);
                    page.Ouput(this.Context);
                }
            }	
		}

		protected void Session_End (object sender, EventArgs e)
		{
		}

		protected void Application_End (object sender, EventArgs e)
        {
            MyApp.Locator.Dispose();
            MyApp.Locator = null;
		}
	}
}
